前言
此篇文章由零開始設定 Linux 主機、安裝 Docker,並設定 Reverse Proxy
Reverse Proxy (反向代理),可以比喻為一棟樓的大門管理員
當一個包裏送至管理員,管理員會依照地址將之轉送給後方的住戶
當一個 Web Request 送至 Reverse Proxy,Reverse Proxy 會依照 URL 將之轉送給後方的伺服器
使用 docker 技術,能在同一台機器上配置多個伺服器,且不會互相干擾
此套 ReverseProxy 可在 docker compose up 時建立路由,自動申請及 Renew SSL 證書
我個人的所有網路服務都是配合此套 ReverseProxy 做建置,特撰此文以做前導
流程簡述
- 起一台新的 Linux
- 安裝 docker、docker-compose
- git clone 下 Reverse Proxy 之建置檔案
- docker-compose up -d
建置
Linux 主機
起一台 Linux 做 Main Server,理論上任何能裝 Docker 的 arm64 linux 都行
我個人是用 DigitalOcean,最便宜的方案每個月 6 美元 (4 美元的方案請略過它)這是老牌的主機商,在業界有信譽有口碑,比國內的主機商穩定得多
亞洲可選的資料中心在新加坡,對台灣連線速度佳,沒有什麼奇怪的問題
透過上方推廣鏈結註冊,你會拿到 60 天內 200 美元的試用額度,而這足夠玩遍所有功能
DigitalOcean 的註冊優惠都是這個價,用我的推廣就當成是對我小額贊助吧我選一台 Ubuntu x64 LTS
由後台從 Console 連入,把 SSH port 改為自設的 port
vi /etc/ssh/sshd_config service ssh restart
如果你使用 22.10 版本以上的 Ubuntu,改用這個方式更改 SSH port
注意 UFW 是否有擋 port
ufw status
如果它是 inactive 以外的狀態,請上網找 Ubuntu UFW 相關文章做調整
需開放 80、443 和自設的 SSH port若是租用 VPS,建議關了 UFW,用 VPS 後台的 Firewall 功能即可
SSH Client,以 root 連入,推薦 MobaXterm
小小建議
可以開一個 3GB 的 Volume 做 Swap,比加 RAM 便宜得多喔
建立 Volume 的說明,還有 Swap 的說明
Docker 安裝
可參閱官方文件
若有更新,請以官方文件為準
(選) 全面更新
sudo apt-get update && sudo apt-get upgrade -y
安裝必要組件
sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release
加入 gpg key
sudo mkdir -p /etc/apt/keyrings curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
加入 repo 庫
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安裝 Docker 和 Docker compose plugin
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
測試
docker --version docker compose version
安裝成功將會印出版本號
Reverse Proxy 建置
請用 root 連入或是 su
docker 所有操作都需要 root 權限,且 docker-compose file 我會建議放在 root 家目錄下
cd 到 root 家目錄
cd
git clone 專案
git clone https://github.com/jim60105/docker-ReverseProxy.git
啟動 nginx reverse proxy
docker-compose -f ./docker-ReverseProxy/docker-compose.yml up -d
Reverse Proxy 之使用
請 對每個後端服務 添加以下環境變數
環境變數 | 說明 |
---|---|
VIRTUAL_HOST | 要導向此 container 的網址 |
LETSENCRYPT_HOST | SSL 證書之網域、別名 |
LETSENCRYPT_EMAIL | SSL 證書申請人 email,到期日近會有通知。請正確填寫,似乎不能變更 |
LETSENCRYPT_TEST | 申請測試證書。請給 true/false。因正式申請有嘗試次數上限、申請數量上限,請在最後上線前再轉 false |
然後將所有後端服務都連上 networks: proxy-tier
,就像這樣
就這麼簡單 (╹ڡ╹)
附註: docker-compose
vs docker compose
- docker-compose: Compose v1,是以 python 寫的,穩定。最後一版是 v1.29.2
- docker compose: Compose v2,是以 golang 重寫的,其設計能從 v1 無痛轉移,大部份的參數相同,
但目前不太穩定。
2024/10/13 更新
目前 v2 已經穩定,請一律使用 v2
Windows Docker Desktop 新舊都有內建,可在設定中開啟 v2
v2 不像 v1 是獨立程式,而是 docker-cli plugin
其餘差異見官方文件。
Compose command compatibility with docker-compose | Docker Documentation
compose-switch: 以 docker-compose
執行 docker compose
網路上舊的 command 都是 docker-compose
,因為 command 不同,沒辦法 copy & paste 直接用,造成不少困擾。官方做了 compose-switch 工具來解決這個問題。它可以在下 command 執行 docker-compose
時改叫 docker compose
來用。
需注意,compose-switch 是「以 docker-compose
來呼叫 v2」,而不是執行 v1,v2 和 v1 有若干不同。
curl -fL https://raw.githubusercontent.com/docker/compose-switch/master/install_on_linux.sh | sh
update-alternatives --install /usr/local/bin/docker-compose docker-compose /usr/local/bin/compose-switch 99
測試
docker-compose version
安裝成功將會印出版本號
附註: 常用 docker 指令
# 列出所有 container,-a: 列出包含未啟動的 container
docker ps -a
# 列出所有 volume
docker volume ls
# 清除所有未被 container 使用的 volume
docker volume prune
# 建立 compose,同時用來做驗證
docker-compose build
# compose 狀態,可以用來檢查變數是否有正確代入,環境變數的讀入順序十分麻煩
docker-compose config
# 啟動 compose,-d: 以 daemon 背景服務執行
docker-compose up -d
# compose 操作都可以用 - f 給定 docker-compose.yml 的位置,但需注意有些相對路徑可能會有問題
docker-compose -f <路徑> up -d
# stop & remove compose 的所有 container,-v: 同時刪除 volume
docker-compose down
# 列出此 compose 的 logs,-f: 持續監聽
docker-compose logs
# 列出指定 container 的 log,-f: 持續監聽 docker logs
docker logs <container name>
# 重啟 compose 下的 container
docker-compose restart
# 在 container 內執行指令,常會執行 bash 來做進入
docker exec -it <指令>
回覆
你可以使用 Mastodon 或其他 ActivityPub/Fediverse 帳號來公開回覆此文章。現有的公開回覆顯示在下方。